As flash memory systems become highly integrated, they are scaled down and the number of bits stored in each memory cell is increased. Thus, a read margin between program states decreases. Thus, read errors occur frequently, and methods of correcting the read errors precisely and quickly have been studied.